package com.example.f22015232.service;

import com.example.f22015232.model.Student;

import com.example.f22015232.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Service
public class StudentService {

    @Autowired
    private StudentRepository studentRepository;

    /**
     * 获取所有学生列表
     *
     * @return 学生列表
     */
    public List<Student> list() {
        return studentRepository.findAll();
    }
    // 根据用户名获取学生列表
    public List<Student> getStudentsForUser(String username) {
        return studentRepository.findByCreatedBy(username); // 假设数据库中有一个 createdBy 字段存储用户名
    }

    /**
     * 根据 ID 删除学生
     *
     * @param id 学生 ID
     */
    public void delete(Integer id) {
        studentRepository.deleteById(id);
    }

    /**
     * 保存学生信息
     *
     * @param s 学生对象
     * @throws Exception 如果电话号码已存在
     */
    public void save(Student s) throws Exception {
        if (!studentRepository.findByTel(s.getTel()).isEmpty()) {
            throw new Exception("Tel already exists");
        }
        studentRepository.save(s);
    }

    /**
     * 根据 ID 获取学生信息
     *
     * @param id 学生 ID
     * @return 学生对象
     */
    public Student get(Integer id) {
        return studentRepository.getReferenceById(id);
    }

    /**
     * 更新学生信息
     *
     * @param s 学生对象
     * @throws Exception 如果电话号码已存在
     */
    public void update(Student student) throws Exception {
        // 检查电话号码是否重复
        List<Student> students = studentRepository.findByTel(student.getTel());
        if (students.size() > 1 || (students.size() == 1 && !students.get(0).getId().equals(student.getId()))) {
            throw new Exception("电话号码已存在");
        }

        // 确保 createdBy 字段不为 null
        if (student.getCreatedBy() == null || student.getCreatedBy().isEmpty()) {
            throw new Exception("Created By 字段不能为空");
        }

        // 保存更新后的学生信息
        studentRepository.save(student);
    }







    /**
     * 根据条件搜索学生信息
     *
     * @param s 学生对象（条件）
     * @return 学生列表
     */
    public List<Student> search(Student student, String username) {
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withIgnorePaths("id") // 忽略 ID 字段
                .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()) // 模糊匹配名字
                .withMatcher("tel", ExampleMatcher.GenericPropertyMatchers.contains()); // 模糊匹配电话

        // 限制查询为当前用户
        student.setCreatedBy(username);
        Example<Student> example = Example.of(student, matcher);

        return studentRepository.findAll(example);
    }
}
